﻿Public Class Prüfung
    Inherits System.Windows.Forms.Form
    Dim labArray(39) As Label ' Dies wird unser Control-Array!
    ''' <summary>
    ''' LaNr, FrNr, Frage, a1,a2,a3,lö,aus,
    ''' </summary>
    Dim fragen(39, 7)
    Dim falsche_antworten As Integer = 0
    Dim aktuelle_frage As Integer = 0
    Dim auswertung As Boolean = False
    Private Sub Prüfung_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load


        ' 40 Label neu erzeugen
        For i As Integer = 0 To 39

            ' Neuen Button erzeugen
            labArray(i) = New Label

            ' Den erzeugten Button verwenden:
            With labArray(i)

                ' Parent festlegen und Controls-Collection erweitern
                .Parent = Me.Panel1
                .Parent.Controls.Add(labArray(i))

                ' Verwaltungsinformationen zuweisen
                .Name = "Button" & CStr(i)
                .TextAlign = ContentAlignment.MiddleCenter
                .BackColor = Color.Red
                .Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
                .TabIndex = i

                ' Darstellung: Beschriften und positionieren
                .Text = CStr(i + 1)
                .Size = New Size(30, 20)
                If i < 20 Then
                    .Location = New Point(10 + i * 35, 5)
                Else
                    .Location = New Point(10 + (i - 20) * 35, 30)
                End If

                .Visible = True

                ' Auf das Click-Ereignis reagieren können:
                AddHandler .Click, AddressOf btnArray_Click

            End With

        Next i

        Prüfung_beginnen()

    End Sub
    ''' <summary>
    ''' Neue Fragen generieren
    ''' </summary>

    Private Sub Prüfung_beginnen()
        Dim neue_frage As Integer
        Dim r As New Random
        For j As Integer = 1 To 11
            neue_frage = r.Next(1, StartForm.frag_an(j) + 1)
            Dim fragen_index As Integer
            Do
                fragen_index = r.Next(0, 40)
            Loop Until fragen(fragen_index, 1) = 0
            fragen(fragen_index, 0) = j
            fragen(fragen_index, 1) = neue_frage
            fragen(fragen_index, 2) = StartForm.fragen(j, neue_frage, 0)
            fragen(fragen_index, 3) = StartForm.fragen(j, neue_frage, 1)
            fragen(fragen_index, 4) = StartForm.fragen(j, neue_frage, 2)
            fragen(fragen_index, 5) = StartForm.fragen(j, neue_frage, 3)
            fragen(fragen_index, 6) = StartForm.fragen(j, neue_frage, 4)
            fragen(fragen_index, 7) = 0

        Next j
        For k As Integer = 0 To 39
            Dim schon_aktiv As Boolean
            Dim akt_la, akt_nr As Integer
            If Not fragen(k, 6) > 0 Then
                Do
                    schon_aktiv = False
                    Dim vergleich As Integer = 0
                    akt_la = 0
                    akt_nr = 0
                    neue_frage = r.Next(1, 213)
                    'MsgBox(neueFrage.ToString)
                    Do
                        akt_la = akt_la + 1
                        vergleich = vergleich + StartForm.frag_an(akt_la)
                    Loop Until neue_frage < (vergleich + 1)
                    akt_nr = neue_frage - (vergleich - StartForm.frag_an(akt_la))
                    For l As Integer = 0 To 39
                        If fragen(l, 0) = akt_la And fragen(l, 1) = akt_nr Then
                            schon_aktiv = True

                        End If
                    Next l
                Loop Until Not schon_aktiv
                fragen(k, 0) = akt_la
                fragen(k, 1) = akt_nr
                fragen(k, 2) = StartForm.fragen(akt_la, akt_nr, 0)
                fragen(k, 3) = StartForm.fragen(akt_la, akt_nr, 1)
                fragen(k, 4) = StartForm.fragen(akt_la, akt_nr, 2)
                fragen(k, 5) = StartForm.fragen(akt_la, akt_nr, 3)
                fragen(k, 6) = StartForm.fragen(akt_la, akt_nr, 4)
                fragen(k, 7) = 0
            End If
        Next k
        fragentausch(0)
        
    End Sub

    Private Sub btnArray_Click(ByVal sender As Object, _
                               ByVal e As System.EventArgs)
        ' Click-Ereignis des Button-Arrays auswerten
        Dim itemClicked As Label = CType(sender, Label)
        Dim index As Integer = -1I

        ' Das betroffene Element im Array suchen (allgemein);
        ' Möglich wäre etwa auch das Vorgehen über die eigens
        ' zugewiesene Name-Eigenschaft des Buttons.
        For i As Integer = LBound(labArray) To UBound(labArray)
            If labArray(i) Is itemClicked Then
                index = i
                Exit For
            End If
        Next
        fragentausch(index)
    End Sub

    Private Sub fragentausch(ByVal neue_frage As Integer)
        If auswertung Then
            labArray(aktuelle_frage).BorderStyle = BorderStyle.None
            Dim alte_frage_auswahl As Integer = 0
            fragen(aktuelle_frage, 7) = alte_frage_auswahl

            labArray(neue_frage).BorderStyle = BorderStyle.FixedSingle
            Label1.Text = fragen(neue_frage, 2)
            CheckBox1.Text = fragen(neue_frage, 3)
            CheckBox2.Text = fragen(neue_frage, 4)
            CheckBox3.Text = fragen(neue_frage, 5)
            Select Case (fragen(neue_frage, 7))
                Case 0
                    CheckBox1.Checked = False
                    CheckBox2.Checked = False
                    CheckBox3.Checked = False
                Case 1
                    CheckBox1.Checked = True
                    CheckBox2.Checked = False
                    CheckBox3.Checked = False
                Case 2
                    CheckBox1.Checked = False
                    CheckBox2.Checked = True
                    CheckBox3.Checked = False
                Case 3
                    CheckBox1.Checked = True
                    CheckBox2.Checked = True
                    CheckBox3.Checked = False
                Case 4
                    CheckBox1.Checked = False
                    CheckBox2.Checked = False
                    CheckBox3.Checked = True
                Case 5
                    CheckBox1.Checked = True
                    CheckBox2.Checked = False
                    CheckBox3.Checked = True
                Case 6
                    CheckBox1.Checked = False
                    CheckBox2.Checked = True
                    CheckBox3.Checked = True
                Case 7
                    CheckBox1.Checked = True
                    CheckBox2.Checked = True
                    CheckBox3.Checked = True
            End Select
            Select Case (fragen(neue_frage, 6))
                Case 0
                    CheckBox1.BackColor = Color.LightGreen
                    CheckBox2.BackColor = Color.LightGreen
                    CheckBox3.BackColor = Color.LightGreen
                Case 1
                    CheckBox1.BackColor = Color.LightGreen
                    CheckBox2.BackColor = Color.LightPink
                    CheckBox3.BackColor = Color.LightPink
                Case 2
                    CheckBox1.BackColor = Color.LightPink
                    CheckBox2.BackColor = Color.LightGreen
                    CheckBox3.BackColor = Color.LightPink
                Case 3
                    CheckBox1.BackColor = Color.LightGreen
                    CheckBox2.BackColor = Color.LightGreen
                    CheckBox3.BackColor = Color.LightPink
                Case 4
                    CheckBox1.BackColor = Color.LightPink
                    CheckBox2.BackColor = Color.LightPink
                    CheckBox3.BackColor = Color.LightGreen
                Case 5
                    CheckBox1.BackColor = Color.LightGreen
                    CheckBox2.BackColor = Color.LightPink
                    CheckBox3.BackColor = Color.LightGreen
                Case 6
                    CheckBox1.BackColor = Color.LightPink
                    CheckBox2.BackColor = Color.LightGreen
                    CheckBox3.BackColor = Color.LightGreen
                Case 7
                    CheckBox1.BackColor = Color.LightGreen
                    CheckBox2.BackColor = Color.LightGreen
                    CheckBox3.BackColor = Color.LightGreen
            End Select
            aktuelle_frage = neue_frage
            If aktuelle_frage = 0 Then
                Button1.Enabled = True
                Button2.Enabled = False
            ElseIf aktuelle_frage = 39 Then
                Button1.Enabled = False
                Button2.Enabled = True
            Else
                Button1.Enabled = True
                Button2.Enabled = True
            End If
        Else

            labArray(aktuelle_frage).BorderStyle = BorderStyle.None
            Dim alte_frage_auswahl As Integer = 0
            If CheckBox1.Checked Then
                alte_frage_auswahl += 1
            End If
            If CheckBox2.Checked Then
                alte_frage_auswahl += 2
            End If
            If CheckBox3.Checked Then
                alte_frage_auswahl += 4
            End If
            If alte_frage_auswahl > 0 Then
                labArray(aktuelle_frage).BackColor = Color.Orange
            Else
                labArray(aktuelle_frage).BackColor = Color.Red
            End If
            fragen(aktuelle_frage, 7) = alte_frage_auswahl


            labArray(neue_frage).BorderStyle = BorderStyle.FixedSingle
            Label1.Text = fragen(neue_frage, 2)
            CheckBox1.Text = fragen(neue_frage, 3)
            CheckBox2.Text = fragen(neue_frage, 4)
            CheckBox3.Text = fragen(neue_frage, 5)
            Select Case (fragen(neue_frage, 7))
                Case 0
                    CheckBox1.Checked = False
                    CheckBox2.Checked = False
                    CheckBox3.Checked = False
                Case 1
                    CheckBox1.Checked = True
                    CheckBox2.Checked = False
                    CheckBox3.Checked = False
                Case 2
                    CheckBox1.Checked = False
                    CheckBox2.Checked = True
                    CheckBox3.Checked = False
                Case 3
                    CheckBox1.Checked = True
                    CheckBox2.Checked = True
                    CheckBox3.Checked = False
                Case 4
                    CheckBox1.Checked = False
                    CheckBox2.Checked = False
                    CheckBox3.Checked = True
                Case 5
                    CheckBox1.Checked = True
                    CheckBox2.Checked = False
                    CheckBox3.Checked = True
                Case 6
                    CheckBox1.Checked = False
                    CheckBox2.Checked = True
                    CheckBox3.Checked = True
                Case 7
                    CheckBox1.Checked = True
                    CheckBox2.Checked = True
                    CheckBox3.Checked = True
            End Select
            aktuelle_frage = neue_frage
            If aktuelle_frage = 0 Then
                Button1.Enabled = True
                Button2.Enabled = False
            ElseIf aktuelle_frage = 39 Then
                Button1.Enabled = False
                Button2.Enabled = True
            Else
                Button1.Enabled = True
                Button2.Enabled = True
            End If
        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If aktuelle_frage > 0 Then
            fragentausch(aktuelle_frage - 1)
        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If aktuelle_frage < 39 Then
            fragentausch(aktuelle_frage + 1)
        End If
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim beantwortete_fragen As Integer = 0
        Dim abfrage As MsgBoxResult
        Dim alte_frage_auswahl As Integer = 0
        If CheckBox1.Checked Then
            alte_frage_auswahl += 1
        End If
        If CheckBox2.Checked Then
            alte_frage_auswahl += 2
        End If
        If CheckBox3.Checked Then
            alte_frage_auswahl += 4
        End If
        If alte_frage_auswahl > 0 Then
            labArray(aktuelle_frage).BackColor = Color.Orange
        Else
            labArray(aktuelle_frage).BackColor = Color.Red
        End If
        fragen(aktuelle_frage, 7) = alte_frage_auswahl

        For i As Integer = 0 To 39
            If fragen(i, 7) > 0 Then
                beantwortete_fragen += 1
            End If
        Next
        If beantwortete_fragen = 40 Then
            abfrage = MsgBox("Es sind alle Fragen beantwortet. Wollen Sie die Prüfung beenden?", MsgBoxStyle.OkCancel)
        Else
            abfrage = MsgBox("Es sind noch " & Str(40 - beantwortete_fragen) & " Fragen nicht beantwortet. Prüfung wirklich beenden?", MsgBoxStyle.OkCancel)
        End If
        If abfrage = MsgBoxResult.Ok Then
            auswertung = True
            Button3.Visible = False

            CheckBox1.AutoCheck = False
            CheckBox2.AutoCheck = False
            CheckBox3.AutoCheck = False
            For i As Integer = 0 To 39
                If fragen(i, 6) = fragen(i, 7) Then
                    'richtig
                    labArray(i).BackColor = Color.LightGreen

                Else
                    'falsch
                    labArray(i).BackColor = Color.LightPink
                    falsche_antworten += 1
                End If
            Next
            If (falsche_antworten > 8) Then
                Label2.ForeColor = Color.Red
                Label2.Text = "nicht bestanden! (" & Str(falsche_antworten) & " Fehler)"
            Else
                Label2.ForeColor = Color.Green
                Label2.Text = "bestanden! (" & Str(falsche_antworten) & " Fehler)"
            End If
            Label2.Visible = True
            fragentausch(aktuelle_frage)
        End If
    End Sub

    Private Sub CheckBox1_CheckStateChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckStateChanged, CheckBox2.CheckStateChanged, CheckBox1.CheckStateChanged
        
    End Sub
End Class